package controlador;

import java.util.Iterator;
import java.util.LinkedList;

import modelo.Fondo;
import modelo.Nivel;
import modelo.Posicion;
import modelo.moviles.balas.*;
import modelo.moviles.Movil;
import modelo.moviles.naves.*;
import titiritero.ControladorJuego;
import titiritero.Dibujable;
import titiritero.vista.TextoDinamico;
import vista.TextoInfomativo;
import vista.VistaAlgo42;
import vista.VistaAvioneta;
import vista.VistaBombardero;
import vista.VistaCaza;
import vista.VistaCohete;
import vista.VistaExplorador;
import vista.VistaFondo;
import vista.VistaFondoTexto;
import vista.VistaHelicoptero;
import vista.VistaLaser;
import vista.VistaAvionCivil;
import vista.VistaTorpedoRastreador;
import vista.VistaTorpedoSimple;

public class ControladorVista {
	
	private ControladorJuego controlador = null;

	private Nivel nivel;

	Fondo fondo;
	Fondo fondoTexto;
	
	public ControladorVista(ControladorJuego controlador){
		this.controlador = controlador;
	}
	
public Dibujable detectorVista (Movil movil){
		
		Dibujable nuevaVista= null;
		
	
			
		if ( movil.getClass() == (Algo42.class)){
			 nuevaVista = new VistaAlgo42()	;}
		if ( movil.getClass() == (Avioneta.class)){
			 nuevaVista = new VistaAvioneta()	;}
		if ( movil.getClass() == (Bombardero.class)){
			 nuevaVista = new VistaBombardero()	;}
		if ( movil.getClass() == (Caza.class)){
			 nuevaVista = new VistaCaza()	;}
		if ( movil.getClass() == (CazaNuevo.class)){
			 nuevaVista = new VistaCaza()	;}
		if ( movil.getClass() == (Helicoptero.class)){
			 nuevaVista = new VistaHelicoptero()	;}
		if ( movil.getClass() == (AvionCivil.class)){
		 nuevaVista = new VistaAvionCivil()	;}
		if ( movil.getClass() == (Explorador.class)){
			 nuevaVista = new VistaExplorador()	;}
		
		
		if ( movil.getClass() == (BalaCohete.class)){
			 nuevaVista = new VistaCohete()	;}
		if ( movil.getClass() == (BalaLaser.class)){
			 nuevaVista = new VistaLaser()	;}
		if ( movil.getClass() == (BalaTorpedoRastreador.class)){
		 nuevaVista = new VistaTorpedoRastreador()	;}
		if ( movil.getClass() == (BalaTorpedoSimple.class)){
			 nuevaVista = new VistaTorpedoSimple()	;}
		
	
		
		return nuevaVista;
			
	}
	

	public void generadorVista(){
		

		
		//Fondo Escenario
		
	
		fondo = new Fondo();
		VistaFondo vistaFondo = new VistaFondo();
		vistaFondo.setPosicionable(fondo);
		
		controlador.agregarDibujable(vistaFondo);
		
		//Fondo Texto
		
		   fondoTexto = new Fondo();
		   fondoTexto.posicion(550, 0);
			VistaFondoTexto vistafondoTexto = new VistaFondoTexto();
			vistafondoTexto.setPosicionable(fondoTexto);
			controlador.agregarDibujable(vistafondoTexto);
			
		
		//Agrego los textos de Puntaje y Energia;
		

		TextoInfomativo textoPuntaje; 
		Posicion posicionPuntaje = new Posicion(565,20);
		textoPuntaje = new TextoInfomativo("Puntaje: ", nivel.getPuntaje(),posicionPuntaje);		
		TextoDinamico textoDinamicoPuntaje = new TextoDinamico (textoPuntaje);
		textoDinamicoPuntaje.setPosicionable(textoPuntaje);	
		controlador.agregarDibujable(textoDinamicoPuntaje);
		
		TextoInfomativo textoEnergia; 
		Posicion posicionEnergia = new Posicion(565,150);
		textoEnergia = new TextoInfomativo("Energia: ", nivel.getAlgo42().getEnergia().getPorcentaje(),posicionEnergia);		
		TextoDinamico textoDinamicoEnergia = new TextoDinamico (textoEnergia);
		textoDinamicoEnergia.setPosicionable(textoEnergia);	
		controlador.agregarDibujable(textoDinamicoEnergia);
		
		
		/*
		 * Agrego los objetos que actuan como vista a la lista de dibujables del controlador
		 * para que sean repintados al final de cada gameloop
		 */
		
		
		
		LinkedList<Movil> ListaMoviles  =  nivel.getMoviles();
		Iterator<Movil> iteradorListaMoviles = ListaMoviles.iterator();
		
		while(iteradorListaMoviles.hasNext()){
			Movil movilActual = iteradorListaMoviles.next();	
			Dibujable nuevaVista = detectorVista(movilActual);
			nuevaVista.setPosicionable(movilActual);			 
			controlador.agregarDibujable(nuevaVista);
		
		}
		
	
		
	}


	public void setNivel(Nivel nivel){
		this.nivel=nivel;
	};

}
